#ifndef OPENRGSS_TYPES_H
#define OPENRGSS_TYPES_H

#include <Ruby/Ruby.h>

/* -- Method Types -- */
typedef VALUE (*ORGSSImmediateMethod)(VALUE);
typedef VALUE (*ORGSSGetterMethod)(VALUE);
typedef VALUE (*ORGSSSetterMethod)(VALUE,VALUE);
typedef VALUE (*ORGSSListMethod)(int, VALUE*, VALUE);
typedef VALUE (*ORGSSMethod)(VALUE,...);

/* -- Object Types -- */
typedef VALUE ORGSSModule;
typedef VALUE ORGSSClass;

/* -- Graphics Method Implementation List -- */
typedef struct {
	ORGSSImmediateMethod update;
	ORGSSGetterMethod fullscreen_get;
	ORGSSSetterMethod fullscreen_set;
	ORGSSImmediateMethod transition;
} ORGSSGraphicsMList;

/* -- Input Method Implementation List -- */
typedef struct {
	ORGSSImmediateMethod update;
} ORGSSInputMList;

/* -- Audio Method Implementation List -- */
typedef struct {
	VALUE (*play_bgm)(VALUE,VALUE,VALUE,VALUE);
	VALUE (*play_bgs)(VALUE,VALUE,VALUE,VALUE);
	VALUE (*play_me)(VALUE,VALUE,VALUE,VALUE);
	VALUE (*play_se)(VALUE,VALUE,VALUE,VALUE);
	
	ORGSSImmediateMethod stop_bgm;
	ORGSSImmediateMethod stop_se;
} ORGSSAudioMList;

/* -- General Types -- */
typedef int ORGSSBool;

#endif